package sortByBits;

public class Solution {
    public int[] sortByBits(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length-1-i; j++) {
                int a = bitCount(arr[j]);
                int b = bitCount(arr[j+1]);
                if(a<b){
                    continue;
                }else if(a>b){
                    swap(j,j+1,arr);
                }else {
                    if(arr[j]>arr[j+1]){
                        swap(j,j+1,arr);
                    }
                }
            }
        }
        return arr;
    }
    private void swap(int i,int j,int[] arr){
        int tmp = arr[j];
        arr[j] = arr[i];
        arr[i] = tmp;
    }
//    private int get(int n){
//        int count = 0;
//        while (n>0){
//            count+=(n&1);//获取二进制的最后一位数字
//            n=(n>>1);
//        }
//        return count;
//    }
    // 计算二进制中1的个数
    int bitCount(int n) {
        int count = 0;
        while (n>0) {
            n &= (n - 1); // 清除最低位的1
            count++;
        }
        return count;
    }
    // 1 0 0 1
    // &
    // 0 0 0 1
    // 位移运算
}

